const { DataTypes } = require("sequelize");
const bcrypt = require("bcryptjs")

module.exports = sequelize => {
  return sequelize.define("User", {
    userName: { // 用户名
      type: DataTypes.STRING,
      allowNull: false, // 是否允许为空
      unique: "userUnique" // 属性可以是布尔值或字符串，相同的字符串,则它们将形成一个复合唯一键
    },
    userId: { // 用户id
      type: DataTypes.STRING,
      primaryKey: true // 主键
    },
    password: {
      type: DataTypes.STRING,
      allowNull: false, // 是否允许为空
      set (val) {
        const salt = bcrypt.genSaltSync(10) // 加盐
        const psw = bcrypt.hashSync(val, salt) // 生成加密密码
        this.setDataValue("password", psw)
      }
    },
    userType: { // 用户角色类型
      type: DataTypes.INTEGER,
      defaultValue: () => {
        return 1
      }
    },
    userStatus: { // 0:已删除 1:未删除 -- 用于逻辑删除
      type: DataTypes.INTEGER,
      defaultValue: () => {
        return 1
      }
    },
    phone: { // 手机号
      type: DataTypes.BIGINT,
      unique: "userUnique" // 属性可以是布尔值或字符串，相同的字符串,则它们将形成一个复合唯一键
    },
    creatTime: { // 创建时间
      type: DataTypes.BIGINT,
      defaultValue: () => {
        return Date.now()
      }
    },
    updateTime: { // 更新时间
      type: DataTypes.BIGINT,
      defaultValue: () => {
        return Date.now()
      }
    }
  }, {
      // 不添加时间戳属性 (updatedAt, createdAt)
      timestamps: false,
      // 禁用修改表名; 默认情况下，sequelize将自动将所有传递的模型名称（define的第一个参数）转换为复数。
      freezeTableName: true
    })
}